﻿// 3546. 复制、剪切、粘贴.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>


using namespace std;
/*
https://www.acwing.com/problem/content/3549/

给定一个字符串 s，对其进行若干次复制、剪切、粘贴操作，三种操作具体如下：

复制操作 COPY l r (0≤l≤r<n)，n代表 s 串的长度。表示将子串 s[l]∼s[r]复制到剪贴板 t里面，覆盖 t字符串。
例如 s 为 abcde，t为 pqr，执行 COPY 1 2 后，s 为 abcde，t 为 bc。
剪切操作 CUT l r (0≤l≤r<n)，
n 代表 s串的长度。表示将子串 s[l]∼s[r] 剪切到剪贴板 t 里面（将该子串在 s串中删除），覆盖 t 字符串。
 例如 s 为 abcde，t为 pqr，执行 CUT 1 2 后，s为 ade，t为 bc。

 粘贴操作 PASTE p (0≤p<n)
，n代表 s串的长度。这个表示将 t 串插入到 s串 p位置的后面。
t保持不变。例如 s为 abcde，t为 pqr，执行 PASTE 1 后，s为 abpqrcde ，t为 pqr。
对每个操作，输出操作后的 s 串。

输入格式
第一行包含字符串 s。

第二行包含整数 m。

接下来 m行，每行包含一个操作指令。

输出格式
对每个操作，输出一行操作后的 s串。

数据范围
初始字符串 s 的长度不超过 100
，
1≤m≤100
输入样例：
abcde
5
CUT  1 2
COPY 0 1
PASTE 1
PASTE 1
CUT  1 3
输出样例：
ade
ade
adade
adadade
aade
*/

string str;
string tmp;
int m;

void solve() {
	string op; int l, r;
	cin >> op;
	if (op == "CUT") {
		cin >> l>>r;
		tmp = str.substr(l, r - l + 1);
		str = str.substr(0, l)+str.substr(r+1);
		cout << str << endl;
	}
	else if(op == "COPY") {
		cin >> l >> r;
		tmp = str.substr(l, r - l + 1);
		cout << str << endl;
	}
	else {
		cin >> l;
		str = str.substr(0, l+1) + tmp + str.substr(l+1);
		cout << str << endl;
	}
}

int main()
{
	cin >> str;
	cin >> m;
	for (int i = 0; i < m; i++) {
		solve();
	}


	return 0;
}

 